The _cccc_llll module provides a raw device interface to XPC (cross partition
communication). These devices take advantage of the XPC rendezvous
capabilities to allow DMA transfers directly from the source to the
destination without any intermediate copying if possible. The DMA
operation is done using the BTE which supports transfers of multiple
cache lines on cache line boundaries. Therefore, in order to avoid the
overhead of the _cccc_llll driver copying data to an intermediate buffer, the
source and destination must be 128 byte aligned. If the transfer is not
a multiple of 128 bytes, only the last part of the cache line will be
copied through an intermediate buffer.
The cross partition raw devices are located in the directory
////hhhhwwww////xxxxpppplllliiiinnnnkkkk////rrrraaaawwww////<<<<rrrreeeemmmmooootttteeee____ppppaaaarrrrttttiiiittttiiiioooonnnn>>>>////<<<<ddddeeeevvvviiiicccceeee____nnnnuuuummmmbbbbeeeerrrr>>>>, where
<<<<rrrreeeemmmmooootttteeee____ppppaaaarrrrttttiiiittttiiiioooonnnn>>>> is the partition ID to which a device should be
opened, and the <<<<ddddeeeevvvviiiicccceeee____nnnnuuuummmmbbbbeeeerrrr>>>> specifies which of the 16 possible
devices to open. These devices appear in the _hhhh_wwww_gggg_rrrr_aaaa_pppp_hhhh(4) the first time a
remote partition is discovered (or activated) as two digit hexadecimal
numbers. They are never removed.
Once a _cccc_llll device is opened using the _oooo_pppp_eeee_nnnn(2) system call (and closed
using _cccc_llll_oooo_ssss_eeee(2)), the file descriptors may be used to exchanged data with
the remote partition using the _rrrr_eeee_aaaa_dddd(2), _wwww_rrrr_iiii_tttt_eeee(2), and _ssss_eeee_llll_eeee_cccc_tttt(2) system
calls. The devices provide a byte stream type interface.
_oooo_pppp_eeee_nnnn(2), _cccc_llll_oooo_ssss_eeee(2), _rrrr_eeee_aaaa_dddd(2), _wwww_rrrr_iiii_tttt_eeee(2), or _ssss_eeee_llll_eeee_cccc_tttt(2) will fail for the _cccc_llll
devices and return to the calling process if one or more of the following
are true
EEEEIIIIOOOO XPC could not be established for the partition requested.
EEEENNNNOOOODDDDEEEEVVVV The partition to which communication is requested no longer
exists.
EEEENNNNOOOODDDDEEEEVVVV The _cccc_llll raw device requested does not exist on the remote
partition.
PPPPaaaaggggeeee 1111
CCCCLLLL((((7777MMMM)))) CCCCLLLL((((7777MMMM))))
EEEEIIIINNNNTTTTRRRR A synchronous read or write was interrupted before
completion.
EEEENNNNOOOOTTTTCCCCOOOONNNNNNNN The XPC channel for this raw device has been unexpectedly
disconnected.
EEEEWWWWOOOOUUUULLLLDDDDBBBBLLLLOOOOCCCCKKKK The call would have blocked if the O_NONBLOCK flag had not
been specified to the _oooo_pppp_eeee_nnnn(2) function.
EEEEBBBBUUUUSSSSYYYY The raw device is currently busy connecting or disconnecting
with the remote partition.
EEEEAAAAGGGGAAAAIIIINNNN The XPC layer is still setting up.
EEEENNNNOOOOTTTTSSSSUUUUPPPP The partition we are trying to communicate with does not have